package com.xuan.task.scheduling;

import com.xuan.task.controller.QuartzComponent;
import com.xuan.task.domain.Logs;
import com.xuan.task.service.LogService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;


/**
 * FileName: AppTask
 * Author:   xuan zongjun
 * Date:     2020/8/24 11:22
 * Description: 定时任务类
 */

@Component
public class AppTask {

    private static final Logger LOGGER = LoggerFactory.getLogger( AppTask.class );

    private static final long SECOND = 1000;

    @Autowired
    LogService logService;

    @Autowired
    private QuartzComponent quartzComponent;

    //@Scheduled(cron = "*/5 * * * * ?")
    public void testTask() {
        LOGGER.info( "当前时间:{}\t\t任务，每个5秒执行一次", new Date() );

    }

    /**
     * 固定延迟3秒，从前一次任务结束开始计算，延迟3秒执行
     */
    //@Scheduled(fixedDelay = 3000)
    public void task3(){
        //do something
    }


    /**
     * 固定间隔3秒，可以引用变量
     * fixedRate：以每次开始时间作为测量，间隔固定时间
     */
    //@Scheduled(fixedRate = 3 * SECOND)
    public void task1() {
        LOGGER.info( "当前时间：{}\t\t任务：fixedRate task，每3秒执行一次", System.currentTimeMillis() );
    }

    /**
     * 每天的22点30分执行
     */
    //@Scheduled(cron = "0 54 14 * * ?")
    public void createCurrentDayHomeworkAndPractice() {
        logService.insertLog( new Logs( "taskJob-createCurrentDayHomeworkAndPractice", "定时任务-学情分析，生成当天的作业和练习当天的数据 ", "定时任务开始-start", new Date() ) );
        quartzComponent.createNotDoneHomeworkAndPractice();
        logService.insertLog( new Logs( "taskJob-createCurrentDayHomeworkAndPractice", "定时任务-学情分析，生成当天的作业和练习当天的数据", "定时任务结束-end", new Date() ) );
        System.out.println( "执行完成定时任务...OK" );
    }

    /**
     * 计算用户 每个电子书完成的百分比 和 练习的单词个数  每晚11点15执行 这个执行时间比较长 大约6个小时
     */
    //@Scheduled(cron="0 15 23 * * ?")
    @Scheduled(cron="0 44 14 * * ?")
    public void createUserPracticeResultByBookNum(){
        logService.insertLog( new Logs("taskJob-createUserPracticeResultByBookNum", "定时任务-电子书完成情况统计-task ","定时任务开始-start",new Date(  )  ) );
        quartzComponent.createUserPracticeResultByBookNum();
        logService.insertLog( new Logs("taskJob-createUserPracticeResultByBookNum", "定时任务-电子书完成情况统计-task","定时任务结束-end",new Date(  )  ) );
        System.out.println("执行完成定时任务...OK");

    }





}
